]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
appDisplay: Connect to hidden signal after content initialization
authorAlessandro Bono <alessandro.bono369@gmail.com>
Fri, 11 Nov 2022 10:47:16 +0000 (11:47 +0100)
committerMarge Bot <marge-bot@gnome.org>
Wed, 16 Nov 2022 17:06:32 +0000 (17:06 +0000)
When the overview is hidden just after starting GNOME Shell the app
grid is not populated yet. Thus, this._grid.nPages is 0. When the
overview is about to be hidden, we call goToPage(0) on the AppGrid.
This results in pageNumber being clamped to -1 and leads to the
following exception:

```
JS ERROR: Exception in callback for signal: hidden: Error: Page -2 does not exist at IconGrid
getItemsAtPage@resource:///org/gnome/shell/ui/iconGrid.js:1383:19
_translatePreviousPageIcons@resource:///org/gnome/shell/ui/appDisplay.js:323:34
_syncPageIndicators@resource:///org/gnome/shell/ui/appDisplay.js:396:14
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:445:14
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:1237:29
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:1584:15
_init/<@resource:///org/gnome/shell/ui/appDisplay.js:1328:52
_emit@resource:///org/gnome/gjs/modules/core/_signals.js:89:42
_hideDone@resource:///org/gnome/shell/ui/overview.js:589:18
_animateNotVisible/<@resource:///org/gnome/shell/ui/overview.js:566:55
onStopped@resource:///org/gnome/shell/ui/overviewControls.js:753:21
_makeEaseCallback/<@resource:///org/gnome/shell/ui/environment.js:150:22
_easeActorProperty/<@resource:///org/gnome/shell/ui/environment.js:316:60
```

Connect to the overview hidden signal only after initializing the
AppDisplay content, so that goToPage(0) is not called when there
is no page yet.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5837
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2536>

js/ui/appDisplay.js

index fd73bf1b71d1b2562b464b45131c50a11fca99b8..d85526d552284423ec1aabb8bbb9ce5b0ccf91fd 100644 (file)
@@ -1324,9 +1324,12 @@ class AppDisplay extends BaseAppView {
 
         this._placeholder = null;
 
-        Main.overview.connect('hidden', () => this.goToPage(0));
-
-        this._redisplayWorkId = Main.initializeDeferredWork(this, this._redisplay.bind(this));
+        this._overviewHiddenId = 0;
+        this._redisplayWorkId = Main.initializeDeferredWork(this, () => {
+            this._redisplay();
+            if (this._overviewHiddenId === 0)
+                this._overviewHiddenId = Main.overview.connect('hidden', () => this.goToPage(0));
+        });
 
         Shell.AppSystem.get_default().connect('installed-changed', () => {
             Main.queueDeferredWork(this._redisplayWorkId);